package com.qyx.pmpucat.service;

import com.mybatisflex.core.paginate.Page;
import com.qyx.pmpucat.dto.*;
import com.qyx.pmpucat.entity.Question;
import com.qyx.pmpucat.entity.UserAnswer;
import org.springframework.http.ResponseEntity;

import java.time.LocalDate;
import java.util.List;

/**
 * 用户答题服务接口
 */
public interface UserAnswerService {
    
    /**
     * 提交单个题目的答案并获取下一道题目
     *
     * @param submitDTO 单个题目的答案信息
     * @return 下一道题目，如果没有更多题目则返回null
     */
    Question submitSingleAnswer(UserAnswerSingleSubmitDTO submitDTO);
    
    /**
     * 获取用户答题记录详情
     *
     * @param id 答题记录ID
     * @return 答题记录详情
     */
    UserAnswer getUserAnswerDetail(Long id);
    
    /**
     * 获取用户答题详情列表
     *
     * @param userAnswerId 用户答题记录ID
     * @return 答题详情列表
     */
    List<UserAnswerDetailResponseDTO> getUserAnswerDetailList(Long userAnswerId);
    
    /**
     * 分页查询用户答题记录
     *
     * @param queryDTO 查询条件
     * @return 答题记录列表
     */
    Page<UserAnswerListResponseDTO> getUserAnswerPage(UserAnswerQueryDTO queryDTO);
    
    /**
     * 获取用户在指定问卷的最新答题记录
     *
     * @param userId 用户ID
     * @param questionnaireId 问卷ID
     * @return 答题记录
     */
    UserAnswerResultDTO getLatestUserAnswer(Long userId, Long questionnaireId);

    /**
     * 获取评估结果
     *
     * @param userAnswerId 用户答题记录ID
     * @return 评估结果
     */
    String getEvaluationResult(Long userAnswerId);
    
    /**
     * 获取用户答题组列表
     *
     * @param userId 用户ID，为null时查询所有用户
     * @return 答题组列表
     */
    List<UserAnswerGroupResultDTO> getUserAnswerGroupList(Long userId);

    List<EvaluationResultBatchDTO> listEvaluationResult(Long userAnswerGroupId);

    ResponseEntity<byte[]> downLoadWordBatch(Long userAnswerGroupId, Long userId);

    ResponseEntity<byte[]> downLoadWord(Long userAnswerGroupId, Long userId);

    ResponseEntity<byte[]> exportUserAnswer(LocalDate startTime, LocalDate endTime);

}